Traditional metadata frameworks use only two FIFO (first in first out) lists to perform metadata flushing. A first FIFO list is used to extract an identifier associated with metadata that records which metadata's FSBN (file system block number) has been changed. When synchronization is triggered, all identifiers in the first FIFO list will be removed to a second FIFO list. Metadata is flushed one by one according to identifiers in the second FIFO list. However, for a multi-core file system, such a method for flushing metadata leads to a bottleneck in the file system.
Since FIFO lists are only time based, an identifier buffer may extend to the entire file system's metadata address space and bring heavy pressure to the system. In addition, the current list design is not friendly to a multi-core system, because it leads to much unnecessary contention and conflict in the list space.